/**
 * 给定一个长度为 N 的数组 A = [A1, A2, · · · AN ]，数组中有可能有重复出现 的整数。
 * 现在小明要按以下方法将其修改为没有重复整数的数组。小明会依次修改 A2,A3,··· ,AN。
 * 当修改 Ai 时，小明会检查 Ai 是否在 A1 ∼ Ai−1 中出现过。如果出现过，则 小明会给 Ai 加上 1 ;如果新的 Ai 仍在之前出现过，小明会持续给 Ai 加 1 ，直 到 Ai 没有在 A1 ∼ Ai−1 中出现过。
 * 当 AN 也经过上述修改之后，显然 A 数组中就没有重复的整数了。 现在给定初始的 A 数组，请你计算出最终的 A 数组
 * https://www.luogu.com.cn/problem/P8686
 */
package 题目集.hash;

import 题目集.并查集.ch13不重复的数组;

import java.io.*;

public class 不重复的数组 {
    /**
     * 思路：模拟+哈希去重.(卡时限过的)
     * 正解：并查集。{@link ch13不重复的数组}
     */
    static int maxN=1000001;
    static int[] arr=new int[maxN];
    static boolean[] set=new boolean[maxN];
    static int n;
    static PrintWriter pr=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
    public static void main(String[] args) {
        Reader sc=new Reader();
        n=sc.nextInt();
        for (int i = 0; i < n; i++) {
            arr[i]=sc.nextInt();
        }
        fun();
        for (int i = 0; i < n; i++) {
            pr.print(arr[i]+" ");
        }
        pr.flush();
    }
    public static void fun(){
        for (int i = 0; i < n; i++) {
            while (set[arr[i]]){
                arr[i]++;
            }
            set[arr[i]]=true;
        }
    }

    static class Reader {
        static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

        public static int nextInt() {
            try {
                in.nextToken();
            } catch (Exception ignored) {}
            return (int) in.nval;
        }
    }

}
